home *** CD-ROM | disk | FTP | other *** search
- 10REM > <Factors$Dir>.!RunImage
- 20
- 30DIM q% 2500
- 40$q%="TASK"
- 50SYS "Wimp_Initialise",200,!q%,"Factors" TO ,task%
- 60SYS "Wimp_ClaimInterface",task%
- 70SYS "Hourglass_On"
- 80:
- 90S%=OPENIN "<Factors$Dir>.!Sprites":T%=EXT#S%+16:CLOSE #S%
- 100DIM sp T%:!sp=T%:sp!4=0
- 110sp!8=16:sp!12=16
- 120SYS "OS_SpriteOp",&209,sp
- 130SYS "OS_SpriteOp",&20A,sp,"<Factors$Dir>.!Sprites"
- 140sicon=FNicon_create(-1,0,0,68,68,0,0,&3002,"!Factors")
- 150:
- 160DIM text$(50),setting(50),flags(50)
- 170DIM submenu(50),ref(50),menupos(20)
- 180DIM menu% 512
- 190DIM indirect% &2000
- 200DIM msgblk% 256
- 210sendtofile$=""
- 220my_filetype%=&FFF
- 230numbert$=""
- 240iptr%=indirect%:iend%=iptr%+&2000
- 250ON ERROR OSCLI "Error "+REPORT$+" : "+STR$(ERL)
- 260:
- 270PROCopentemplatefile("<Factors$Dir>.Templates")
- 280PROCloadtemplate("main")
- 290SYS "Wimp_CreateWindow",,q% TO main%
- 300PROCloadtemplate("info")
- 310SYS "Wimp_CreateWindow",,q% TO info%
- 320PROCloadtemplate("save")
- 330SYS "Wimp_CreateWindow",,q% TO save%
- 331PROCloadtemplateasd("me")
- 332SYS "Wimp_CreateWindow",,q% TO me%
- 340PROCclosetemplatefile
- 350:
- 360PROCicon_putdata(q%,main%,5,"Ready",0)
- 370SYS "Hourglass_Off"
- 380REPEAT
- 390 PROCaction(FNpoll(0))
- 400UNTIL FALSE
- 410:
- 420DEFPROCclosedown
- 430$q%="TASK"
- 440SYS "Wimp_CloseDown",task%,q%!0
- 450END
- 460ENDPROC
- 470:
- 480DEFPROCclickwindow(mousex%,mousey%,button%,handle%,icon%,ob%)
- 490CASE handle% OF
- 500 WHEN main% :PROCclickmain(button%,icon%)
- 510 WHEN save% :PROCclicksave(button%,icon%)
- 515 WHEN info% :PROCclickinfo(button%,icon%)
- 516 WHEN me% :PROCclickme(button%,icon%)
- 520 WHEN -2 :PROCclickiconbar(button%,icon%)
- 530ENDCASE
- 540ENDPROC
- 550:
- 560DEFPROCclickiconbar(button%,icon%)
- 570IF icon%<0 THEN ENDPROC
- 580CASE TRUE OF
- 590 WHEN button%=2
- 600 IF icon%=sicon THEN
- 610 PROCmenu_sicon
- 620 ENDIF
- 630 WHEN button%=4
- 640 PROCopenwindow(main%,FALSE,-1)
- 650 open%=TRUE
- 660 ENDIF
- 670ENDCASE
- 680ENDPROC
- 690:
- 700DEFPROCmenu_sicon
- 710no=0:MOUSE x,y,b
- 720PROCdefine_menu_text("Info",no,0,0,0,0,&10021,info%,0):no+=1
- 730PROCdefine_menu_text("Quit",no,0,0,0,0,&10021,0,-1):no+=1
- 740PROCcreate_menu("Factors",no,100,x-64,96+(no*40))
- 750menu_nr%=0
- 760claimmenu$="sicon"
- 770ENDPROC
- 780:
- 790DEFPROCreceive(q%)
- 800CASE q%!16 OF
- 810WHEN 0 :PROCclosedown
- 820WHEN 2 :PROCdatasave(q%)
- 830ENDCASE
- 840ENDPROC
- 850:
- 860DEFPROCopenwindow(handle%,full%,front%)
- 870q%!0=handle%
- 880IF NOT full% THEN SYS "Wimp_GetWindowState",0,q%
- 890IF front% THEN q%!28=-1
- 900SYS "Wimp_OpenWindow",0,q%
- 910ENDPROC
- 920
- 930DEFPROCclosewindow(handle%)
- 940IF FNoktoclosew(handle%) THEN
- 950 q%!0=handle%
- 960 SYS "Wimp_CloseWindow",0,q%
- 970ENDIF
- 980ENDPROC
- 990
- 1000DEFFNpoll(mask%)
- 1010SYS "Wimp_Poll",mask%,q% TO a%
- 1020SYS "Wimp_PollPointer",a%,,task%
- 1030=a%
- 1040
- 1050DEFPROCaction(evnt%)
- 1060CASE evnt% OF
- 1070 WHEN 0:PROCdo_background_task
- 1080 WHEN 1:PROCredrawwindow(q%!0)
- 1090 WHEN 2:PROCopenwindow(q%!0,TRUE,0)
- 1100 WHEN 3:PROCclosewindow(q%!0)
- 1110 WHEN 4:
- 1120 WHEN 5:
- 1130 WHEN 6:PROCclickwindow(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
- 1140 WHEN 7:IF claimdrag$<>"" THEN junk=EVAL("FNuserdrag_"+claimdrag$)
- 1150 WHEN 8:
- 1160 WHEN 9:IF claimmenu$<>"" THEN PROCwhichmenu(claimmenu$)
- 1170 WHEN 17,18:PROCreceive(q%)
- 1180ENDCASE
- 1190ENDPROC
- 1200
- 1210DEFPROCreceive(q%)
- 1220CASE q%!16 OF
- 1230WHEN 0 :$q%="TASK":SYS "Wimp_CloseDown",task%,q%!0:END
- 1240ENDCASE
- 1250ENDPROC
- 1260
- 1270DEFPROClwaorigin(b,RETURN x%,RETURN y%)
- 1280x%=b!0-b!16:y%=b!12-b!20
- 1290ENDPROC
- 1300
- 1310DEFFNicon_create(window%,minx%,miny%,width%,height%,fg%,bg%,flg%,data$)
- 1320LOCAL i%
- 1330q%!0=window%
- 1340q%!4=minx%:q%!8=miny%
- 1350q%!12=minx%+width%:q%!16=miny%+height%
- 1360q%!20=flg% OR bg%<<28 OR fg%<<24
- 1370IF q%!20 AND &100 THEN
- 1380 i%=INSTR(data$,",")
- 1390 q%!24=EVAL(LEFT$(data$,i%-1))
- 1400 q%!28=-1
- 1410 q%!32=EVAL(MID$(data$,i%+1))
- 1420ELSE
- 1430$(q%+24)=LEFT$(data$,11)
- 1440ENDIF
- 1450SYS "Wimp_CreateIcon",0,q% TO i%
- 1460=i%
- 1470
- 1480DEFPROCicon_putdata(b,wh%,ih%,text$,rd)
- 1490b!0=wh%:b!4=ih%
- 1500SYS "Wimp_GetIconState",,b
- 1510SYS "Wimp_DeleteIcon",,b
- 1520b!4=wh%:$(b!28)=text$:b+=4
- 1530SYS "Wimp_CreateIcon",,b
- 1540IF rd THEN SYS "Wimp_ForceRedraw",b!0,b!4,b!8,b!12,b!16
- 1550b-=4
- 1560ENDPROC
- 1570
- 1580DEFPROCicon_putdata(q%,whandle%,ihandle%,data$,redraw)
- 1590q%!0=whandle%
- 1600q%!4=ihandle%
- 1610SYS "Wimp_GetIconState",,q%
- 1620$(q%!28)=data$
- 1630IF redraw THEN
- 1640 SYS "Wimp_ForceRedraw",whandle%,q%!8,q%!12,q%!16,q%!20
- 1650ENDIF
- 1660ENDPROC
- 1670
- 1680DEFFNicon_getdata(q%,whandle%,ihandle%)
- 1690q%!0=whandle%
- 1700q%!4=ihandle%
- 1710SYS "Wimp_GetIconState",,q%
- 1720=$(q%!28)
- 1730
- 1740DEFPROCnewvals
- 1750gtx=q%!36:gty=q%!40
- 1760wbx=q%!4:wby=q%!8
- 1770wtx=q%!12:wty=q%!16
- 1780xsc=q%!20:ysc=q%!24
- 1790hp=wtx-wbx:vp=wty-wby:ebx=xsc
- 1800etx=xsc+hp:ety=ysc:eby=ysc-vp
- 1810ENDPROC
- 1820
- 1830DEFPROCdefine_menu_text(text$,n,w,t,d,s,flags,sm,l)
- 1840text$(n)=text$
- 1850setting(n)=0
- 1860IF w THEN setting(n)=setting(n) OR &04:flags=flags OR &100
- 1870IF t THEN setting(n)=setting(n) OR &01
- 1880IF d THEN setting(n)=setting(n) OR &02
- 1890IF l THEN setting(n)=setting(n) OR &80
- 1900IF s THEN flags=flags OR &400000
- 1910flags(n)=flags
- 1920submenu(n)=sm
- 1930ENDPROC
- 1940
- 1950DEFPROCcreate_menu(title$,n,width%,x,y)
- 1960mb%=menu%
- 1970menus=0:q=0
- 1980REPEAT
- 1990 menupos(menus)=mb%:menus+=1
- 2000 $mb%=title$
- 2010 mb%?12=7
- 2020 mb%?13=2
- 2030 mb%?14=7
- 2040 mb%?15=0
- 2050 mb%!16=width%
- 2060 mb%!20=40 :REM height of menu items
- 2070 mb%!24=0 :REM vertical gap between items (also top & bottom)
- 2080 itemptr=mb%+28
- 2090 REPEAT
- 2100 itemptr!0=setting(q)
- 2110 ref(q)=itemptr+4
- 2120 itemptr!8=flags(q) OR 0<<28 OR 7<<24
- 2130 IF (flags(q) AND &100)=0 THEN
- 2140 $(itemptr+12)=text$(q)
- 2150 ELSE
- 2160 pos=INSTR(text$(q),"(")
- 2170 itemptr!12=EVAL(LEFT$(text$(q),pos-1))
- 2180 itemptr!16=-1
- 2190 itemptr!20=EVAL(RIGHT$(text$(q),LEN(text$(q))-pos))
- 2200 ENDIF
- 2210 itemptr+=24:q+=1
- 2220 UNTIL (setting(q-1) AND &80)>0
- 2230 mb%=itemptr
- 2240 IF q<>n THEN title$=text$(q):q+=1
- 2250UNTIL q=n
- 2260
- 2270FOR q=0 TO n-1
- 2280 IF submenu(q)>0 AND submenu(q)<menus THEN
- 2290 !ref(q)=menupos(submenu(q))
- 2300 ELSE
- 2310 !ref(q)=submenu(q):REM was -1 i.e. submenu disallowed! This change
- 2320 :REM allows a window handle to be used
- 2330 ENDIF
- 2340NEXT q
- 2350SYS "Wimp_CreateMenu",,menu%,x,y
- 2360ENDPROC
- 2370
- 2380DEFPROCopentemplatefile(file$)
- 2390SYS "Wimp_OpenTemplate",,file$
- 2400ENDPROC
- 2410
- 2420DEFPROCloadtemplate(name$)
- 2430LOCAL type%,pos%,x%
- 2440SYS "Wimp_LoadTemplate",,q%,iptr%,iend%,-1,name$,0 TO type%,,iptr%,,,,pos%
- 2450ENDPROC
- 2451
- 2452DEFPROCloadtemplateasd(name$)
- 2453LOCAL type%,pos%,x%
- 2454SYS "Wimp_LoadTemplate",,q%,iptr%,iend%,-1,name$,0 TO type%,,iptr%,,,,pos%
- 2455GOTO 332
- 2460
- 2470DEFPROCclosetemplatefile
- 2480SYS "Wimp_CloseTemplate"
- 2490ENDPROC
- 2500
- 2510DEFFNleaf(path$)
- 2520WHILE INSTR(path$,".")
- 2530 path$=MID$(path$,INSTR(path$,".")+1)
- 2540ENDWHILE
- 2550=path$
- 2560
- 2570DEFFNgname(ptr)
- 2580f$=""
- 2590WHILE ?ptr<>0 AND ?ptr<>13
- 2600 f$=f$+CHR$?ptr:ptr+=1
- 2610ENDWHILE
- 2620=f$
- 2630
- 2640DEFPROCdo_background_task
- 2650ENDPROC
- 2660
- 2670DEFPROCredrawwindow(handle%)
- 2680LOCAL void%
- 2690q%!0=handle%
- 2700SYS "Wimp_RedrawWindow",0,q% TO more%
- 2710PROClwaorigin(q%+4,x0%,y0%)
- 2720WHILE more%
- 2730 PROCnewvals
- 2740 CASE handle% OF
- 2750 ENDCASE
- 2760 SYS "Wimp_BorderWindow",,q%
- 2770 SYS "Wimp_GetRectangle",0,q% TO more%
- 2780ENDWHILE
- 2790ENDPROC
- 2800:
- 2810DEFFNoktoclosew(handle%)
- 2820LOCAL shutting%
- 2830shutting%=TRUE
- 2840=shutting%
- 2850
- 2860DEFPROCclickmain(button%,icon%)
- 2870CASE TRUE OF
- 2880WHEN (button% AND 4)=4 AND icon%<>-1 OR (button% AND 1)=1 AND icon%<>-1
- 2890 CASE icon% OF
- 2900 WHEN 3 :PROCslabicon
- 2910 PROCopenwindow(save%,FALSE,-1)
- 2920 WHEN 4 :PROCslabicon
- 2930 PROCextractfactors
- 2940 ENDCASE
- 2950ENDCASE
- 2960ENDPROC
- 2970:
- 2980DEFPROCslabicon
- 2990SYS "Wimp_BorderIcon",,q%
- 3000q%!8=0
- 3010SYS "Wimp_BorderIcon",,q%
- 3020ENDPROC
- 3030:
- 3040DEFPROCclicksave(button%,icon%)
- 3050CASE TRUE OF
- 3060WHEN (button% AND 4)=4 AND icon%=5
- 3070 PROCslabicon:PROCsavefile(FNicon_getdata(q%,save%,4))
- 3080WHEN (button% AND 4)=4 AND icon%=3
- 3090 claimdrag$="save"
- 3100 !q%=save%
- 3110 SYS "Wimp_GetWindowState",,q%
- 3120 wex=q%!4-q%!20
- 3130 wey=q%!16-q%!24
- 3140 q%!4=3
- 3150 SYS "Wimp_GetIconState",,q%
- 3160 !q%=save%:q%!4=5
- 3170 q%!8=q%!8+wex
- 3180 q%!12=q%!12+wey
- 3190 q%!16=q%!16+wex
- 3200 q%!20=q%!20+wey
- 3210 q%!24=0:q%!28=0
- 3220 q%!32=&7FFFFFFF:q%!36=&7FFFFFFF
- 3230 SYS "Wimp_DragBox",,q%
- 3240ENDCASE
- 3250ENDPROC
- 3260
- 3270DEFFNuserdrag_save
- 3280SYS "Wimp_GetPointerInfo",,msgblk%
- 3290msgblk%!20=64:msgblk%!32=0
- 3300msgblk%!36=1:msgblk%!40=msgblk%!12
- 3310msgblk%!44=msgblk%!16
- 3320msgblk%!48=!msgblk%
- 3330msgblk%!52=msgblk%!4
- 3340msgblk%!56=&100
- 3350msgblk%!60=my_filetype%
- 3360$(msgblk%+64)=FNleaf(FNicon_getdata(q%,save%,4))
- 3370SYS "Wimp_SendMessage",17,msgblk%+20,msgblk%!12,msgblk%!16
- 3380=0
- 3390
- 3400DEFPROCextractfactors
- 3410PROCicon_putdata(q%,main%,5,"Extracting factors",1)
- 3420PROCicon_putdata(q%,main%,5,"Extracting factors",1)
- 3430numbert$=FNicon_getdata(q%,main%,1)
- 3440IF numbert$="" THEN PROCicon_putdata(q%,main%,5,"Please enter a number",1):ENDPROC
- 3450number%=VAL(numbert$)
- 3460sendtofile$=""
- 3470SYS "Hourglass_On"
- 3480FOR vara=1 TO number%
- 3485 SYS "Hourglass_Percentage",(vara/number%)*100
- 3490 FOR varb=1 TO number%
- 3500 IF number%/vara=varb THEN sendtofile$=sendtofile$+""+STR$(vara)+", "
- 3510 NEXT varb
- 3520NEXT vara
- 3530SYS "Hourglass_Off"
- 3540PROCicon_putdata(q%,main%,5,"Finished, please save file",1)
- 3550ENDPROC
- 3560
- 3570(menu$)
- 3580LOCAL void%
- 3590CASE menu$ OF
- 3600 WHEN "sicon" :void%=FNmenuselect_sicon
- 3610ENDCASE
- 3620ENDPROC
- 3630
- 3640DEFFNmenuselect_sicon
- 3650LOCAL level0
- 3660level0=q%!0
- 3670CASE level0 OF
- 3680 WHEN 0 :PROCopenwindow(info%,FALSE,-1)
- 3690 WHEN 1 :PROCclosedown
- 3700ENDCASE
- 3710=0
- 3720
- 3730DEFPROCdatasave(b)
- 3740PROCsavefile(FNgname(b+44))
- 3750b!12=b!8:b!16=3:!b=64
- 3760SYS "Wimp_SendMessage",17,b,b!20,b!24
- 3770ENDPROC
- 3780
- 3790DEFPROCsavefile(file$)
- 3800LOCAL X%
- 3810IF (INSTR(file$,".")=0 AND INSTR(file$,":")=0) THEN
- 3820 : SYS "Wimp_ReportError","....To save, please drag the text icon to a directory viewer",&14,"Message from Factors" TO response%
- 3830 : ENDPROC
- 3840ENDIF
- 3850SYS "Hourglass_On"
- 3860Exec%=q%!0
- 3870Load%=q%?4
- 3880Load%=(Load% AND &FF) OR (&FFF<<20) OR (&FFF<<8)
- 3890SYS "OS_File",7,file$,Load%,Exec%,0,0
- 3900SYS "OS_Find",204,file$ TO chan%
- 3910BPUT#chan%,"Factors program output file"
- 3920BPUT#chan%,"---------------------------"
- 3930BPUT#chan%," "
- 3940BPUT#chan%,"File generated : "+TIME$
- 3950BPUT#chan%," "
- 3960BPUT#chan%,"Base number that factors were extracted from : "+numbert$
- 3970BPUT#chan%," "
- 3980BPUT#chan%,"Factors : "+sendtofile$
- 3990CLOSE#chan%
- 4000OSCLI "SetType "+file$+" &FFF"
- 4005PROCicon_putdata(q%,save%,4,file$,1)
- 4010SYS "Hourglass_Off"
- 4020ENDPROC
- 4030
- 6870DEFPROCwhichmenu(menu$)
- 6880LOCAL void%
- 6890CASE menu$ OF
- 6910 WHEN "sicon" :void%=FNmenuselect_sicon
- 6920ENDCASE
- 6930ENDPROC
- 6940:
- 6950DEFPROCclickinfo(button%,icon%)
- 6960CASE TRUE OF
- 6970WHEN (button% AND 4)=4 AND icon%<>-1 OR (button% AND 1)=1 AND icon%<>-1
- 6980 CASE icon% OF
- 6990 WHEN 2 :PROCslabicon
- 6998 PROCopenwindow(me%,FALSE,-1)
- 7000 ENDCASE
- 7010ENDCASE
- 7020ENDPROC
- 7030
- 7040DEFPROCclickme(button%,icon%)
- 7050CASE TRUE OF
- 7060WHEN (button% AND 4)=4 AND icon%<>-1 OR (button% AND 1)=1 AND icon%<>-1
- 7070 CASE icon% OF
- 7080 WHEN 12 :PROCslabicon
- 7090 PROCclosewindow(me%)
- 7100 ENDCASE
- 7110ENDCASE
- 7120ENDPROC
-